﻿#pragma once

#include "../MonsterObject.h"
#include "../MapObject.h"
#include "../../MirDatabase/MonsterInfo.h"
#include "../../../Shared/Enums.h"
#include "../PlayerObject.h"
#include <vector>
#include <any>

using namespace Server::MirDatabase;
namespace S = ServerPackets;

namespace Server::MirObjects::Monsters
{
    class ThunderElement : public MonsterObject
    {
    private:
        MapObject *OriginalTarget;

    public:
        virtual ~ThunderElement()
        {
            delete OriginalTarget;
        }

    protected:
        ThunderElement(MonsterInfo *info);

        void CompleteAttack(std::vector<std::any> &data) override;

        void ProcessTarget() override;

        void Attack() override;

    public:
        int Attacked(MonsterObject *attacker, int damage, DefenceType type = DefenceType::ACAgility) override;
        int Attacked(PlayerObject *attacker, int damage, DefenceType type = DefenceType::ACAgility, bool damageWeapon = true) override;
        int Pushed(MapObject *pusher, MirDirection dir, int distance) override;

        void PoisonDamage(int amount, MapObject *Attacker) override;
    };
}
